package aaa.config; /**
 * Spring MVC配置类
 */

// 导入拦截器类
import aaa.config.LoggingInterceptor;
// 导入Spring相关注解
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
// 导入Spring MVC配置相关接口和类
import org.springframework.web.servlet.config.annotation.*;
// 导入视图解析相关类
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

// 声明这是一个Spring配置类
@Configuration
// 启用Spring MVC注解驱动配置
@EnableWebMvc
// 配置组件扫描路径，包含控制器层和服务层
@ComponentScan(basePackages = {
        "aaa.controller", // 控制器层包路径
        "aaa.service" // 服务层包路径
})
// 实现WebMvcConfigurer接口以自定义Spring MVC配置
public class WebConfig implements WebMvcConfigurer {

    /**
     * 配置视图解析器Bean
     * @return 视图解析器实例
     */
    @Bean
    public InternalResourceViewResolver viewResolver() {
// 创建内部资源视图解析器
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
// 设置视图类为JSTL视图
        resolver.setViewClass(JstlView.class);
// 设置视图前缀（JSP文件存放路径）
        resolver.setPrefix("/WEB-INF/jsp/");
// 设置视图后缀（JSP文件扩展名）
        resolver.setSuffix(".jsp");
        return resolver;
    }

    /**
     * 配置静态资源处理
     * @param configurer 默认Servlet处理器配置器
     */
    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
// 启用默认Servlet处理静态资源
        configurer.enable();
    }

    /**
     * 添加拦截器配置
     * @param registry 拦截器注册表
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
// 注册日志拦截器
        registry.addInterceptor(new LoggingInterceptor())
// 拦截所有路径
                .addPathPatterns("/**")
// 排除特定路径
                .excludePathPatterns("/test-exclude");
    }

// 其他MVC配置可在此添加
// 例如：跨域配置、消息转换器、视图控制器等
}
/**
 * 这个配置类主要完成以下功能：
 *
 * ‌核心注解‌：
 * @EnableWebMvc：启用Spring MVC默认配置
 * @ComponentScan：自动扫描指定包下的组件
 * ‌关键配置‌：
 * 视图解析器：配置JSP视图的路径和扩展名
 * 静态资源处理：允许通过默认Servlet访问静态资源
 * 拦截器注册：添加自定义拦截器并配置拦截规则
 * ‌扩展性‌：
 * 实现了WebMvcConfigurer接口，可以重写更多MVC配置方法
 * 预留了扩展点，方便添加其他MVC相关配置
 * ‌典型应用‌：
 * 传统JSP视图的Spring MVC应用
 * 需要拦截器进行统一处理的Web应用
 * 需要自定义MVC配置的项目
 * 这个配置类通常作为Spring MVC应用的入口配置，与数据库配置类(如之前的DatabaseConfig)共同构成完整的应用配置体系。
 */